package com.party.core.service.activity.impl;

import com.party.common.paging.Page;
import com.party.common.utils.StringUtils;
import com.party.core.dao.read.activity.ActivityInfoReadDao;
import com.party.core.dao.write.activity.ActivityInfoWriteDao;
import com.party.core.model.BaseModel;
import com.party.core.model.activity.ActivityInfo;
import com.party.core.service.activity.IActivityInfoService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * ActivityService活动服务实现
 *
 * @author Wesley
 * @data 16/9/5 17:28 .
 */

@Service
public class ActivityInfoService implements IActivityInfoService {

    @Autowired
    private ActivityInfoReadDao activityInfoReadDao;

    @Autowired
    private ActivityInfoWriteDao activityInfoWriteDao;

    /**
     * 插入活动数据
     *
     * @param activity 活动实体
     * @return 插入结果（true/false）
     */
    @Override
    public String insert(ActivityInfo activity) {
        BaseModel.preInsert(activity);
        boolean result = activityInfoWriteDao.insert(activity);
        if (result) {
            return activity.getId();
        }
        return null;
    }

    /**
     * 更新活动信息
     *
     * @param activity 活动实体
     * @return 更新结果（true/false）
     */
    @Override
    public boolean update(ActivityInfo activity) {
        if (null == activity)
            return false;
        if (null != activity.getUpdateDate()) {
            activity.setUpdateDate(new Date());
        }
        return activityInfoWriteDao.update(activity);
    }

    /**
     * 逻辑删除活动数据
     *
     * @param id 活动实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean deleteLogic(@NotNull String id) {
        if (StringUtils.isBlank(id))
            return false;

        return activityInfoWriteDao.deleteLogic(id);
    }

    /**
     * 物理删除活动数据
     *
     * @param id 活动实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean delete(@NotNull String id) {
        if (StringUtils.isBlank(id))
            return false;

        return activityInfoWriteDao.delete(id);
    }

    /**
     * 批量逻辑删除活动数据
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDeleteLogic(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids))
            return false;

        return activityInfoWriteDao.batchDeleteLogic(ids);
    }

    /**
     * 批量物理删除活动数据
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDelete(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids))
            return false;

        return activityInfoWriteDao.batchDelete(ids);
    }

    /**
     * 根据主键获取活动实体数据
     *
     * @param id 主键
     * @return 活动实体
     */
    @Override
    public ActivityInfo get(String id) {
        if (StringUtils.isBlank(id))
            return null;

        return activityInfoReadDao.get(id);
    }

    /**
     * 分页查询活动列表
     *
     * @param activity 活动实体
     * @param page     分页信息
     * @return 活动列表
     */
    @Override
    public List<ActivityInfo> listPage(ActivityInfo activity, Page page) {
        return activityInfoReadDao.listPage(activity, page);
    }

    /**
     * 查询所有活动数据
     *
     * @param activity 活动实体
     * @return 活动列表
     */
    @Override
    public List<ActivityInfo> list(ActivityInfo activity) {
        return activityInfoReadDao.listPage(activity, null);
    }


    /**
     * 根据活动主键集合查询活动数据
     *
     * @param ids      主键集合
     * @param activity 活动实体
     * @param page     分页信息
     * @return 活动列表
     */
    @Override
    public List<ActivityInfo> batchList(@NotNull Set<String> ids, ActivityInfo activity, Page page) {
        if (CollectionUtils.isEmpty(ids))
            return Collections.EMPTY_LIST;

        return activityInfoReadDao.batchList(ids, new HashedMap(), page);
    }

    @Override
    public ActivityInfo findByActivityId(String activityId) {
        return activityInfoReadDao.findByActivityId(activityId);
    }
}
